<?php

function p($ar){
    echo '<pre>';
    if(is_array($ar)){
        print_r($ar);
    }else{
        var_dump($ar);
    }
    echo '</pre>';
}



//例子：手机为例
$attr1=['1'=>'红色','2'=>'白色','3'=>'蓝色','10'=>'黑色'];//颜色
$attr2=['4'=>'32G','5'=>'64G']; //存储
$attr3=['6'=>'4G','7'=>'8G']; //内存
$attr3=['8'=>'17寸','9'=>'13寸']; //大小

$attr_ar=[
    [1,2,3,10],
    [4,5],
    [6,7],
    [8,9]
];
//先有数种sku 如下
$sku=[
    [1,4,6,8],//红色-32G-4G-17寸
    [1,4,7,9],
    [2,4,6,8],
    [2,5,7,8],
    [3,5,7,9]
];
$ky=[2];[1,3,4,5,6,7,8];
$ky=[2,4];[1,6,7,8,9];[1,6,8];


$key_ar=[2,4,6];//已经选的属性
$daixuan_ar=[];//可选属性
$jingxuan_ar=[];//不可选属性
$attr_ar_total=$sku_ar_total=[];
foreach($attr_ar as $v){
    $attr_ar_total=array_merge($attr_ar_total,$v);
}
foreach($sku as $v){
    $sku_ar_total=array_merge($sku_ar_total,$v);
}
//从总属性晒出出，没有参与sku组成的属性就是不可选属性
$jingxuan_ar=array_diff($attr_ar_total,$sku_ar_total);

//如果选中了一个属性
if(count($key_ar)==1){
    foreach($attr_ar as $v){
        if(in_array($key_ar[0],$v)){
            $daixuan_ar=array_merge($daixuan_ar,$v);
            $daixuan_ar=array_diff($daixuan_ar,$key_ar);
            $daixuan_ar=array_diff($daixuan_ar,$jingxuan_ar);
        }
    }
}
$ar=[];
foreach($sku as $v){
    $cha_ar=array_intersect($v,$key_ar);
    $r=array_diff($key_ar,$v);
    if(empty($r) && $cha_ar){
        //筛选包含所有选中的属性sku
        //剩余attr的可选属性
        $ar=array_merge(array_diff($v,$key_ar));
    }
    //有交集的sku的属性都纳入可选属性
    if($cha_ar){
        $daixuan_ar=array_merge($daixuan_ar,$v);
    }
}

$br=[];
foreach($attr_ar as $v){
    $cha_ar=array_intersect($v,$key_ar);
    if(empty($cha_ar)){
        //还未选的attr的属性
        $br=array_merge($br,$v);
    }
}
//还未选attr属性中的不可选属性
$cr=array_diff($br,$ar);
//可选属性中的还未选择的属性
$dr=array_intersect($br,$daixuan_ar);

//可选属性中的还未选择的属性 减去 未选属性中的必选属性 就是未选属性中的 不可选属性
$er=array_diff($dr,$ar);
$jingxuan_ar=array_merge($jingxuan_ar,$er);
$daixuan_ar=array_diff($daixuan_ar,$cr);
$daixuan_ar=array_diff($daixuan_ar,$jingxuan_ar);

p(array_unique($jingxuan_ar));
p(array_diff(array_unique($daixuan_ar),$key_ar));

p(array_unique($jingxuan_ar));
p(array_unique($key_ar));die;

